unit dmanalise;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, DB, FileUtil, LResources, Forms, Controls, Dialogs,
  ZConnection, ZDataset, ZSqlUpdate, ZSequence, LR_Class, LR_DBSet;

type
  TdadosAnalises = record
    id_analise: integer;
    data_analise: TDate;
    numero_registro: integer;
    id_produtor: integer;
    id_tecnico: integer;
    valor: real;
  end;

  { TDataAnalise }

  TDataAnalise = class(TDataModule)
    DatasourceAmostra: TDatasource;
    DatasourceAnalise: TDatasource;
    ZQueryAmostra: TZQuery;
    ZQueryAmostraareia: TFloatField;
    ZQueryAmostraargila: TFloatField;
    ZQueryAmostraclassificacao: TStringField;
    ZQueryAmostraid_amostra: TLongintField;
    ZQueryAmostraid_analise: TLongintField;
    ZQueryAmostrapeso_becker_1: TLongintField;
    ZQueryAmostrapeso_becker_2: TLongintField;
    ZQueryAmostrapeso_volume_pipetado_1: TLongintField;
    ZQueryAmostrapeso_volume_pipetado_2: TLongintField;
    ZQueryAmostrareferencia_cliente: TStringField;
    ZQueryAmostrareferencia_laboratorio: TLongintField;
    ZQueryAmostrasilte: TFloatField;
    ZQueryAnalise: TZQuery;
    ZQueryAnalisedata: TDateField;
    ZQueryAnaliseid_analise: TLongintField;
    ZQueryAnaliseid_produtor: TLongintField;
    ZQueryAnaliseid_tecnico: TLongintField;
    ZQueryAnalisenome_produtor: TStringField;
    ZQueryAnalisenome_tecnico: TStringField;
    ZQueryAnalisenumero_registro: TLongintField;
    ZQueryAnalisevalor: TFloatField;
    ZSeqAmostra: TZSequence;
    ZSeqAnalise: TZSequence;
    ZUpdateAmostra: TZUpdateSQL;
    ZUpdateAnalise: TZUpdateSQL;
    procedure AmostraCalculaValor();
    procedure AnaliseCadastro();
    function AnaliseBuscar(): TdadosAnalises;
    procedure AnaliseAlterar();
    procedure AnaliseInserir();
    procedure AnaliseExcluir();
    procedure AnaliseCancelar();
    procedure AnaliseFinalizar();
    procedure AmostraClassifica();
    procedure ZQueryAmostraAfterDelete(DataSet: TDataSet);
    procedure ZQueryAmostraAfterPost(DataSet: TDataSet);
    procedure ZQueryAmostrapeso_becker_1Validate(Sender: TField);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  DataAnalise: TDataAnalise;

implementation

uses dmprincipal, dmlaboratorio, fanalisebusca, dmcadastro, ftecnicocadastro,
  flaboratoriocadastro, fprodutorcadastro, fanaliselancamento, fprodutorbusca,
  ucalculosclassificacao;

{ TDataAnalise }

procedure TDataAnalise.AmostraCalculaValor();
var
  cont: integer;
begin
  if (not DataLaboratorio.ZQueryLaboratorio.Active) then
  begin
    DataLaboratorio.ZQueryLaboratorio.Active := True;
  end;
  ZQueryAmostra.Last;
  cont := ZQueryAmostra.RecordCount;
  ZQueryAnalise.Edit;
  ZQueryAnalise.FieldByName('valor').AsFloat :=
    cont * DataLaboratorio.ZQueryLaboratorio.FieldByName('preco_amostra').Value;
  ZQueryAnalise.Post;
end;

procedure TDataAnalise.AnaliseCadastro();
begin
  DataPrincipal.ConsultaVazio(ZQueryAnalise, 'analise');
  FormAnaliseLancamento.ShowModal;
end;

function TDataAnalise.AnaliseBuscar(): TdadosAnalises;
var
  analise: TdadosAnalises;
begin
  analise.id_analise := -1;
  FormAnaliseBusca.ShowModal;
  if (not ZQueryAnalise.IsEmpty) then
  begin
    analise.id_analise := ZQueryAnalise.FieldByName('id_analise').Value;
    analise.data_analise := ZQueryAnalise.FieldByName('data').AsDateTime;
    analise.numero_registro := ZQueryAnalise.FieldByName('numero_registro').Value;
    analise.id_tecnico := ZQueryAnalise.FieldByName('id_tecnico').Value;
    analise.id_tecnico := ZQueryAnalise.FieldByName('id_produtor').Value;
    analise.valor := ZQueryAnalise.FieldByName('valor').AsFloat;
  end;
  Result := analise;
  ZQueryAmostra.Active := True;
end;

procedure TDataAnalise.AnaliseAlterar();
begin
  ZQueryAnalise.Edit();
end;

procedure TDataAnalise.AnaliseInserir();
begin
  ZQueryAnalise.Insert();
end;

procedure TDataAnalise.AnaliseExcluir();
begin
  ZQueryAnalise.Delete();
end;

procedure TDataAnalise.AnaliseCancelar();
begin
  ZQueryAnalise.Cancel();
end;

procedure TDataAnalise.AnaliseFinalizar();
begin
  ZQueryAnalise.Post();
  if (not ZQueryAmostra.Active) then
  begin
    ZQueryAmostra.Active := True;
  end;
end;

procedure TDataAnalise.AmostraClassifica();
var
  DadosAmostra: TDadosAmostra;
  Componentes: TComponentes;
begin
  DadosAmostra.peso_becker_1 := ZQueryAmostra.FieldByName('peso_becker_1').AsInteger;
  DadosAmostra.peso_volume_pipetado_1 :=
    ZQueryAmostra.FieldByName('peso_volume_pipetado_1').AsInteger;
  DadosAmostra.peso_becker_2 := ZQueryAmostra.FieldByName('peso_becker_2').AsInteger;
  DadosAmostra.peso_volume_pipetado_2 :=
    ZQueryAmostra.FieldByName('peso_volume_pipetado_2').AsInteger;
  Componentes := Porcentagens(DadosAmostra);
  ZQueryAmostra.FieldByName('areia').AsFloat := Componentes.areia;
  ZQueryAmostra.FieldByName('argila').AsFloat := Componentes.argila;
  ZQueryAmostra.FieldByName('silte').AsFloat := Componentes.silte;
  ZQueryAmostra.FieldByName('classificacao').AsString := Classificacao(Componentes);
end;

procedure TDataAnalise.ZQueryAmostraAfterDelete(DataSet: TDataSet);
begin
  AmostraCalculaValor();
end;

procedure TDataAnalise.ZQueryAmostraAfterPost(DataSet: TDataSet);
begin
  ZQueryAmostra.Refresh();
  AmostraCalculaValor();
end;

procedure TDataAnalise.ZQueryAmostrapeso_becker_1Validate(Sender: TField);
begin
  AmostraClassifica();
end;

initialization
  {$I dmanalise.lrs}

end.
